package com.shigen.demo.datastruct.tree;

/**
 * 树的抽象方法
 *
 * @author shigenfu
 * @date 2022/7/12 4:04 下午
 */
public interface AbstractTree {

  /**
   * 前序遍历
   */
 void preOrder(Node root);

  /**
   * 中序遍历
   */
 void inOrder(Node root);

  /**
   * 后序遍历
   */
 void postOrder(Node root);

 /**
  * 获得节点的总数
  */
 int getNodeCount(Node root);

 /**
  * 获得叶子节点总数
  */
 int getLeafNodeCount(Node root);

 /**
  * 获得树的高度
  */
 int getHeight(Node root);

 /**
  * 树中是否存在元素
  */
 boolean contains(Node root, int val);

 /**
  * 获得第K层的节点个数
  */
 int getKLevelNode(Node root, int k);

 /**
  * 添加一个节点，root为null，是根节点；不为空，保证左节点>根节点>右节点
  */
 Node addRecursive(Node root, int value);

 /**
  * 根据value查找node
  */
 Node getNode(Node root, int value);

 /**
  * 根据value删除节点
  */
 Node deleteNode(Node root, int value);

 /**
  * 广度优先遍历
  */
 void traverseLevelOrder(Node root);
}
